<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>高阶函数_函数柯里化</title>
    </head>
    <body>
        <!-- 准备好一个“容器” -->
        <div id="test"></div>

        <!-- 引入react核心库 -->
        <script type="text/javascript" src="../js/react.development.js"></script>
        <!-- 引入react-dom，用于支持react操作DOM -->
        <script type="text/javascript" src="../js/react-dom.development.js"></script>
        <!-- 引入babel，用于将jsx转为js -->
        <script type="text/javascript" src="../js/babel.min.js"></script>

        <script type="text/babel">
            //#region
            /*
                高阶函数：如果一个函数符合下面2个规范中的任何一个，那该函数就是高阶函数。
                                1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
                                2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                                常见的高阶函数有：Promise、setTimeout、arr.map()等等

                函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式。
                    function sum(a){
                        return(b)=>{
                            return (c)=>{
                                return a+b+c
                            }
                        }
                    }
                */
            //#endregion
            //创建组件
            class Login extends React.Component {
                //初始化状态
                state = {
                    username: '', //用户名
                    password: '' //密码
                }

                //保存表单数据到状态中
                saveFormData = (dataType) => {
                    return (event) => {
                        this.setState({[dataType]: event.target.value})
                    }
                }

                //表单提交的回调
                handleSubmit = (event) => {
                    event.preventDefault() //阻止表单提交
                    const {username, password} = this.state
                    alert(`你输入的用户名是：${username},你输入的密码是：${password}`)
                }

                render() {
                    return (
                        <form onSubmit={this.handleSubmit}>
                            用户名：<input onChange={this.saveFormData('username')} type="text" name="username"/>
                            密码：<input onChange={this.saveFormData('password')} type="password" name="password"/>
                            <button>登录</button>
                        </form>
                    )
                }
            }

            //渲染组件
            ReactDOM.render(<Login/>, document.getElementById('test'))
        </script>
    </body>
</html>